package com.dragon.lambda;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * @author: dragon
 * @description: lambda表达式的测试案例
 * @date:Created in 2019/03/11
 */
public class TestLambda {

//	1.一个括号内用逗号分隔的形式参数，参数是函数式接口里面方法的参数
//
//	2.一个箭头符号：->
//
//	3.方法体，可以是表达式和代码块，方法体函数式接口里面方法的实现，如果是代码块，则必须用{}来包裹起来，且需要一个return 返回值，
//	但有个例外，若函数式接口里面方法返回值是void，则无需{}
//
//	总体看起来像这样
//	(parameters) -> expression 或者 (parameters) -> { statements; }

    public static void runThreadUserInnerClass() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("内部类实现的线程");
            }
        }).start();
    }

    public static void runThreadUserLambda() {
        //Runnable是一个函数接口，只包含了有个无参数的，返回void的run方法；
        //所以lambda表达式左边没有参数，右边也没有return，只是单纯的打印一句话
        new Thread(() -> System.out.println("lambda实现的线程")).start();
    }

    public static void main(String[] args) {
        FunctionInterface fi = file -> {
            try {
                FileInputStream fis = new FileInputStream(file);
                byte[] array = new byte[1024 * 2];
                int length = 0;
                StringBuilder sb = new StringBuilder();
                while ((length = fis.read(array)) != -1) {
                    sb.append(new String(array, 0, length));
                }
                fis.close();
                return sb.toString();
            } catch (IOException e) {
                throw new RuntimeException("asdf");
            }
        };

    }
}
